(define  maximo 20)
(if (> 15 maximo) 'muito-longe 'perto)

;;eqv? retorna #t p/ número, caractere, booleano ou símbolo igual, para objetos
;; compostos retorna #t se eles tem a mesma localização na memória
(eqv? 1 1)
(eqv? 'a 'a)
(eqv? "" "")

;;duas funções anônimas não ocupam necessariamente a mesma localização na memória
;; exemplo:
(eqv? (lambda (x) x) (lambda (x) x))

;; definindo funções com define
(define (reply s)
  (if (equal? "hello" (substring s 0 5))
      "hi!"
      "huh"))
(reply "hello scheme")

(define (resposta s y)
  (if (and (equal? "s" s) (equal? "n" y))
      "igual"
      "diferente"))
(resposta "s" "n")
(resposta "n" "y")

;;definindo funções com lambda
(define discriminante
  (lambda (a b c)
    (- (* b b)
       (* 4 a c))))

(define raiz
  (lambda (a b c delta sinal)
    (let ((numerador (- (sinal (sqrt delta))
                        b)))
      (/ numerador (* 2 a)))))
;;Observe que cond compara !!!!!símbolos!!!!
(define raizes-grau-2
  (lambda (a b c)
    (let ((delta (discriminante a b c)))
      (newline)
      (display delta)(newline)
      (cond ((positive? delta)
             (list (raiz a b c delta +)
                   (raiz a b c delta -)))
            ((zero? delta)
             (list (/ (- b) (* 2 a))))
            (else (list))))))
(raizes-grau-2 1 -2 1)

(define carta->valor
  (lambda (carta)
    (case carta
      ((2 3 4 5 6 7 8) carta)
      ((j) 11)
      ((q) 12)
      ((k) 13)
      ((a) 14)
      (else (error "Carta não existe")))))

(carta->valor 'q)



